﻿using System;
using System.Data;
using System.Data.SqlClient;

namespace prjKQXS_DLL.Hop_dong
{
    public class clsBienDongDL
    {
        /// <summary>
        /// Cài đặt event OnError để bắt các lỗi chưa được xử lý
        /// </summary>
        /// <param name="e"></param>
        public delegate void OnErrorHandler(Exception e);
        public event OnErrorHandler OnError;

        /// <summary>
        /// Cài đặt event OnAction để thông báo các trạng thái kết quả
        /// </summary>
        /// <param name="e"></param>
        public delegate void OnActionHandler(SqlException e);
        public event OnActionHandler OnAction;

        #region Methods ==============================================================
        /// <summary>
        /// Dùng tại rptBienDongDaiLy
        /// </summary>
        /// <param name="thang"></param>
        /// <param name="denthang"></param>
        /// <param name="nam"></param>
        /// <param name="MaDV">Truyền vào là '%' hoặc mã đơn vị tương ứng</param>
        /// <returns></returns>
        public DataTable loadData_DV(int thang, int denthang, int nam, char MaDV)
        {
            DataTable dt = new DataTable("rptBiendongdlCap2");

            try
            {
                SqlConnection conn = new SqlConnection(BienTc.connString);
                conn.Open();

                SqlDataAdapter da = null;

                da = new SqlDataAdapter("proc_HD_rptBienDongDaiLy", conn);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                da.SelectCommand.Parameters.AddWithValue("@thang", thang);
                da.SelectCommand.Parameters.AddWithValue("@denthang", denthang);
                da.SelectCommand.Parameters.AddWithValue("@nam", nam);
                da.SelectCommand.Parameters.AddWithValue("@madonvi", MaDV);
                da.Fill(dt);
            }
            catch (SqlException e)
            {
                OnAction(e);
            }
            catch (Exception e)
            {
                OnError(e);
            }

            return dt;
        }


        /// <summary>
        /// Dùng tại rptTongHopDaiLyCTy
        /// </summary>
        /// <param name="thang"></param>
        /// <param name="denthang"></param>
        /// <param name="nam"></param>
        /// <param name="CuoiThangTruoc"></param>
        /// <returns></returns>
        public DataTable loadData_CT(int thang, int denthang, int nam, DateTime CuoiThangTruoc)
        {
            DataTable dt = new DataTable("rptDSDaiLy_Cty");

            try
            {
                SqlConnection conn = new SqlConnection(BienTc.connString);
                conn.Open();

                SqlDataAdapter da = new SqlDataAdapter("proc_HD_rptTongHopDaiLyCTy", conn);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                da.SelectCommand.Parameters.AddWithValue("@CuoiThangTruoc", CuoiThangTruoc.Date);
                da.SelectCommand.Parameters.AddWithValue("@Thang", thang);
                da.SelectCommand.Parameters.AddWithValue("@DenThang", denthang);
                da.SelectCommand.Parameters.AddWithValue("@Nam", nam);
                da.Fill(dt);
            }
            catch (SqlException e)
            {
                OnAction(e);
            }
            catch (Exception e)
            {
                OnError(e);
            }

            return dt;
        }

        /// <summary>
        /// Tính tổng số hợp đồng đầu khoảng thời gian đã chọn (= tổng số hợp đồng hiện có trước khoảng thời gian đã chọn).
        /// <para>Dùng tại rptBienDongDaiLy</para>
        /// </summary>
        /// <param name="MaDV">Mã đơn vị tương ứng hoặc là "%" nếu lấy tất cả các đơn vị</param>
        /// <param name="CuoiThangTruoc">Ngày cuối cùng trước khoảng thời gian đã chọn</param>
        /// <returns></returns>
        public int HD_DauThang(char MaDV, DateTime CuoiThangTruoc)
        {
            int x = 0;

            if (clsLicense.checkLicense())
            {
                DataTable dt = clsCommon.FillData("SELECT dbo.func_HD_DauThang('" + 
                    CuoiThangTruoc.ToString("yyyy-MM-dd") + "', '" + MaDV + "')");
                x = Convert.ToInt32(dt.Rows[0][0].ToString().Trim());
            }

            return x;
        }

        /// <summary>
        /// Tính tổng số hợp đồng ký mới trong khoảng thời gian đã chọn.
        /// <para>Dùng tại rptBienDongDaiLy</para>
        /// </summary>
        /// <param name="MaDV">Mã đơn vị tương ứng hoặc là "%" nếu lấy tất cả các đơn vị</param>
        /// <param name="thang">Từ tháng</param>
        /// <param name="denthang">Đến tháng</param>
        /// <param name="nam">Năm</param>
        /// <returns></returns>
        public int HD_KyMoi(char MaDV, int thang, int denthang, int nam)
        {
            int x = 0;

            if (clsLicense.checkLicense())
            {
                DataTable dt = clsCommon.FillData("SELECT dbo.func_HD_KyMoi(" +
                    thang + ", " + denthang + ", " + nam + ", '" + MaDV + "')");
                x = Convert.ToInt32(dt.Rows[0][0].ToString().Trim());
            }

            return x;
        }

        /// <summary>
        /// Tính tổng số hợp đồng thanh lý trong khoảng thời gian đã chọn.
        /// <para>Dùng tại rptBienDongDaiLy</para>
        /// </summary>
        /// <param name="MaDV">Mã đơn vị tương ứng hoặc là "%" nếu lấy tất cả các đơn vị</param>
        /// <param name="thang">Từ tháng</param>
        /// <param name="denthang">Đến tháng</param>
        /// <param name="nam">Năm</param>
        /// <returns></returns>
        public int HD_ThanhLy(char MaDV, int thang, int denthang, int nam)
        {
            int x = 0;

            if (clsLicense.checkLicense())
            {
                DataTable dt = clsCommon.FillData("SELECT dbo.func_HD_ThanhLy(" +
                    thang + ", " + denthang + ", " + nam + ", '" + MaDV + "')");
                x = Convert.ToInt32(dt.Rows[0][0].ToString().Trim());
            }

            return x;
        }
        #endregion Methods ===========================================================
    }
}